iT邦幫忙

2026 iThome 鐵人賽

DAY 9
0
IT Operation

從前後端踏上 AWS 雲端架構勇者之路系列 第 9

兩個子網路長得一樣,為什麼只有一個能對外?

  • 分享至 

  • xImage
  •  

把家裡的分享器拆成零件,搬到 AWS

昨天有分享過:每台裝置一個內部 IP、全家一個公有 IP、分享器那張兩行的路由表、一群號碼怎麼寫

今天把它們搬到 AWS 上吧!前幾天有分享過像是一個活動報名網站有 Web 1、Web 2 的 EC2,跟之後的資料庫,要得放進去「網路」,也就是今天的主角

在建立 EC2 主機的過程中,會有個位置來選擇「子網路」

關於 AWS 跟自己家網路的差異白話文如下?:

你家 AWS 名稱 白話
自己家的網路 VPC 你在雲端劃出來的一塊網路,也就是社區。自己建的 VPC 沒主動接,就沒有對外
你家那間房(192.168.1.x Subnet 社區裡的一間房,主機放這裡;一間房只在一個 AZ
分享器裡那張決定往哪走的表 Route Table(路由表) 這間房的資料要往哪走
分享器接出去到電信商的那條線 Internet Gateway(IGW) 社區通往 Internet 的門
內部 IP/公有 IP Private IP/Public IP 也就是前面講的兩個 IP 號碼

而 VPC(Virtual Private Cloud),就是今天的主角~

昨天練習的那三台機器換上 AWS 的名字,順便多補一台你想開卻開不出來的:

昨天那三台機器換上 AWS 的名字,加一台開不出來的:VPC event-vpc 10.0.0.0/16 裡,Public Subnet public-az1 10.0.0.0/24 可對外,裡面 Web 主機 10.0.0.24;Private Subnet private-az2 10.0.254.0/24 只在內部,裡面資料庫 10.0.254.24;10.0.3.24 沒有這個 Subnet 開不出來;10.1.1.24 是另一個 VPC

  • 社區就是 VPC,這篇叫它 event-vpc,號碼 10.0.0.0/16
  • 0 號房是可對外的 Public Subnet public-az1,Web 主機放這裡。它的內部 IP 10.0.0.24 是 AWS 從這間房的範圍發的,昨天是分享器發號碼,在 AWS 是 Subnet 發的~
  • 254 號房是只在內部的 Private Subnet private-az2,而資料庫則是放這裡,IP 設計為 10.0.254.24
  • 10.0.3.24 是新補的:你會發現想開這台,但開不出來。因為 VPC 的號碼範圍夠切 256 個 Subnet,但你只建自己需要的,這篇只建了 10.0.0.0/2410.0.254.0/24 兩個,其他範圍先留著。AWS 開任何一台機器都要先選一個已經存在的 Subnet,10.0.3.x 沒有對應的 Subnet,自然就沒有地方放這台機器
  • 10.1.1.24 是另一個 VPC 的機器,兩個 VPC 預設互不相通。像是你帳號裡本來就有一個 AWS 給的 default VPC,號碼是 172.31.0.0/16官方文件),以及自己建的 event-vpc 這樣一來就建立好兩個社區

整組皆起來,就像如下的內容:

一個 VPC 10.0.0.0/16 裡有兩個 Subnet:Public Subnet 10.0.0.0/24 可對外、Private Subnet 10.0.254.0/24 只在內部;各掛一張路由表,public-rt 有 10.0.0.0/16 → local 和 0.0.0.0/0 → IGW 兩行,private-rt 只有 local 一行;只有 public-rt 那一行連到 Internet Gateway,再通到 Internet

一個 VPC 裡面兩個 Subnet,並且各掛一張路由表,一個 Internet Gateway 掛在社區邊上通到 Internet。而左邊那張路由表有一條線連到大門,這條線也就是整篇的重點

回到活動報名網站,我們接著一步步來蓋看看:

  1. 建 VPC:event-vpc,範圍 10.0.0.0/16
  2. 建兩個 Subnet:public-az110.0.0.0/24 放 AZ 1,之後都放 ec2 的 Web 主機。private-az210.0.254.0/24 放 AZ 2,之後放資料庫。public-az1 。接下來也可以打開「自動指派公有 IPv4」的開關,private-az2 不開,他是我們之後做內部資料庫的素材,只是先將內部網址打點好~
  3. 接著就建大門 event-igw,接到 event-vpc
  4. 建兩張路由表 public-rtprivate-rt,各掛對應的 subnet

為什麼要兩間?Web 主機要讓使用者連得到,放可對外的那間;資料庫放只在內部的那間,外面的人根本沒有路可以摸到它

這裡有一件一定要記住的事:建 Subnet 的時候,AWS 不會有「public/private」這個選項

兩間房建完,除了網段、AZ 等等,沒有任何一個欄位寫著 public 或 private

那差別揪竟在哪?

在第 4 步的路由表,也就是昨天家裡那張路由表的 AWS 版本。路由表管的是這間房的資料往外送要走哪條路;別人能不能進來

還記得昨天家裡那張表只有兩行嗎?AWS 版操作的話也是也是兩行:

目的地 寫法 白話
同一個社區裡 10.0.0.0/16 → local 社區內直接送,同社區其他房間都到得了。local 不是你打的字,是 AWS 填好的固定值,建表時自動加
其他所有地方 0.0.0.0/0 → IGW 不在社區裡的,全部往外部大門送

注意範圍不一樣:家裡那張表第一行只管一間房(192.168.1),AWS 的 local 管理整個社區

所以 public-rt 兩行,local 加一條往大門;private-rt 只有 local 那一行。少了那一行,資料就只能在社區裡繞,繞不出跑到能對外的竟

接著把 public-rt 掛到 public-az1private-rt 關聯到 private-az2

AWS 官方文件對 Public Subnet 也曾定義過:一間房掛的路由表有一條路通到 IGW,它就是 Public Subnet;沒有,就是 Private Subnet

回頭看上面那張全景圖,應該多少有些輪廓了?

那到底什麼算 Public Subnet?

來看一個同事的操作。他有一間房,原本叫 public-app,掛的路由表只有 local 那一行。他做了三件事:把房間名字改成 private-app;打開「自動指派公有 IPv4」;確認 VPC 已經掛了 IGW

然後問你:這間現在算 public 還是 private?

自動指派公有 IPv4 在管的事情是「之後在這間房開的主機,要不要自動拿一個公有 IP」。它是位址設定,已經開著的主機也不會補拿

VPC 掛了 IGW 只代表大門裝了,這間房的路由表沒有那一行,資料還是不知道怎麼走到大門

**唯一的依據,是它掛的路由表有沒有 0.0.0.0/0 → IGW。**官方說法是「有一條路通到 IGW」,這系列都用 0.0.0.0/0 這種寫法

什麼決定 Public Subnet:Subnet 名稱叫 public 或 private、自動指派公有 IPv4 開著、VPC 已掛 IGW 三項都不是依據;關聯的路由表有 0.0.0.0/0 → IGW 才是唯一依據

所以答案是:它還是 Private Subnet。要變 public,是去路由表加那一行

反過來講,「Public」也只是可以對外,不是一定連得到。要真的連得到,還要兩件事:主機要有公有 IP、門鎖要放行(Security Group)

VPC 要摳摳嗎?

VPC、Subnet、路由表、IGW 這些很佛通通都不收錢,官方有寫到「使用 VPC 沒有額外費用」

會收錢的有兩樣,這篇都不會碰到:

  • NAT Gateway(Network Address Translation gateway):機器自己有公有 IP;只在內部那間房裡的主機要出去(例如抓更新)才需要,AWS 把這招做成一個零件叫 NAT Gateway,要收摳摳:按小時計費,另外還有流量處理費。這篇不建
  • 公有 IPv4:主機真的拿到一個公有 IP 才開始算,每小時 US$0.005,開整個月大約 US$3.6(價目表)。AWS 對帳號有一套免費方案(Free Tier),裡面 EC2 的公有 IPv4 每月有 750 小時不收錢

那實務上怎麼切?

AWS 官方的建議可以整理成幾條:

  1. VPC 開 /16,Subnet 切 /24
  2. 可對外的房和只在內部的房各至少一間;要跨 AZ,就在另一個 AZ 再加同類型的房。AWS 官方建議正式環境至少兩個 AZ
  3. 可對外那間放要讓使用者連的東西,只在內部那間放資料庫。AWS 官方的正式環境範例更保守:主機也收進只在內部那間,前面擋一台負載平衡器(幫你把使用者分給好幾台主機的服務,放在可對外那間)接使用者。主機收進去之後要出去抓更新就得配 NAT Gateway
  4. 兩間房的號碼不能重疊,而且都要落在 VPC 的範圍裡

畫出來就是這樣,實線是這篇蓋的兩間,虛線是之後跨 AZ 再加的。這也是雲端工程師平常在做的事之一:先把網段切好,再決定每個服務住哪間房

切網段,決定每個服務住哪間房:VPC 10.0.0.0/16 分 AZ 1 與 AZ 2;這篇蓋的是 AZ 1 的 Public Subnet 10.0.0.0/24(Web 主機)和 AZ 2 的 Private Subnet 10.0.254.0/24(資料庫);之後跨 AZ 再加 AZ 2 的 Public Subnet 10.0.1.0/24(Web 2)和 AZ 1 的 Private Subnet 10.0.255.0/24(資料庫備援),以虛線表示

小結

最後小結一下~

重點 記住這句
VPC 與 Subnet VPC 是你在雲端劃的一塊網路,主機放在裡面的 Subnet。Subnet 就是「子網路」,一間房只在一個 AZ
路由表 家裡那張路由表的 AWS 版,管往外部推送。local 是社區內
Public 怎麼判 只看這間房掛的路由表有沒有 0.0.0.0/0 → IGW;名字、自動指派 IP、VPC 掛 IGW 都不算
可對外≠連得到 還要主機有公有 IP、門鎖放行;蓋這些全部 $0,NAT 和公有 IPv4 才收費

下次如果你聽到「這間是 public subnet」嗎??

相信你直覺就會想問:

  1. 它掛的路由表,有沒有 0.0.0.0/0 → IGW 那一行?
  2. 這間房在哪個 AZ,跟另一間是不是分開的?
  3. 裡面的主機有公有 IP 嗎?門鎖開了嗎?

希望這篇讓你看懂主機到底放在哪,我們下篇見 :D


上一篇
你知道你上網有兩個 IP 嗎?進 AWS 前先搞懂家裡的網路
系列文
從前後端踏上 AWS 雲端架構勇者之路9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言